/**
 * 
 */
package edu.berkeley.nlp.PCFGLA;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;

import edu.berkeley.nlp.util.ArrayUtil;

/**
 * @author petrov
 *
 */
public class Posterior implements Serializable {
	/**
	 * 
	 */
//	private static final long serialVersionUID = 1L;
	double[][][][] iScore;
	double[][][][] oScore;
  int[][][] iScale;
  int[][][] oScale;  
	boolean[][][] allowedStates;

	Posterior(double[][][][] iS, double[][][][] oS, int[][][] i, int[][][] o, boolean[][][] a){
		iScore = ArrayUtil.clone(iS);
		oScore = ArrayUtil.clone(oS);
		iScale = (i != null) ? ArrayUtil.clone(i) : null;
		oScale = (o != null) ? ArrayUtil.clone(o) : null;
		allowedStates = ArrayUtil.clone(a);
//		if (i!=null) System.err.println("in constructor " +iScale.length);
	}
	
	
//  public boolean Save(String fileName) {
//		try {
//	    ObjectOutputStream out = new ObjectOutputStream(new GZIPOutputStream(new FileOutputStream(fileName)));
//	    out.writeObject(this);
//	    out.flush();
//	    out.close();
//	  } catch (IOException e) {
//	    System.out.println("IOException: "+e);
//	    return false;
//	  }
//	  return true;
//  }
  
//  public static Posterior Load(String fileName) {
//  	Posterior posterior = null;
//    try {
//      FileInputStream fis = new FileInputStream(fileName); // Load from file
//      GZIPInputStream gzis = new GZIPInputStream(fis); // Compressed
//      ObjectInputStream in = new ObjectInputStream(gzis); // Load objects
//      posterior = (Posterior)in.readObject(); // Read the mix of grammars
//      in.close(); // And close the stream.
//      gzis.close();
//      fis.close();
//    } catch (IOException e) {
//      System.out.println("IOException\n"+e);
//      return null;
//    } catch (ClassNotFoundException e) {
//      System.out.println("Class not found!");
//      return null;
//    }
//    return posterior;
//  }

	
}
